/**
 * 用于创建显示数据的DataGrid
 * @param tableID:table给件的ID,
 * @param toolbarID:与table关联的toolbar组件的ID,
 * @param tableName:要查询的表名
 * @param params:查询的条件
 * @param successCallback成功返回的方法
 * @param editorCol 需要生成编辑器的列名
 * @param edtorType 需要生成编辑器的类型
 * @param colColor 设置列颜色方法
 * @param colCheckbox 是否需要复选框 可传值Y/N Y显示复选框
 */
function CreateDBGrid(tableID, toolbarID, table_name, params, successCallback,editorCol,edtorType,colColor,colCheckbox) {
	CreateDBGrid1(tableID, toolbarID, table_name, {editorCol:editorCol,edtorType:edtorType,colColor:colColor,colCheckbox:colCheckbox,successCallback:successCallback})
}
/**
 * 用于创建显示数据的DataGrid 实现原理： 1、调用easyui的通用方法，生成一个Table 2、动态从数据库中取出指定TABLE 或VIEW的字段
 * select * from v_sys_customset_tablecols where userid=? order by sortindex;
 * 3、然后显示字段
 * 4、显示数据，统一使用后台JAVA函数RefreshData(tablename,sWhere,orderby,sortType,page)传入参数：
 * 
 * @param tableID:table给件的ID,
 * @param toolbarID:与table关联的toolbar组件的ID,
 * @param tableName:要查询的表名
 * @param params:查询的条件
 *  1、 editorCol 需要生成编辑器的列名
 *  2、 edtorType 需要生成编辑器的类型
 *  3、 colColor 设置列颜色方法
 *  4、 colCheckbox 是否需要复选框 可传值Y/N Y显示复选框
 *  5、 successCallback成功返回的方法
 *  6、 pagination 分页标志
 */
function CreateDBGrid1(tableID, toolbarID,table_name, params) {
	var editorCol,edtorType,colColor,colCheckbox,successCallback,pagination,selectOnCheck;
	var singleSelect = true,frozenColumns = [];
	if(params) {
		editorCol = params.editorCol;
		edtorType = params.edtorType;
		colColor = params.colColor;
		colCheckbox = params.colCheckbox;
		successCallback = params.successCallback;
		pagination = params.pagination;
		if(params.frozenColumns){
			frozenColumns = params.frozenColumns;
		}
		if(params.selectOnCheck != undefined){
			selectOnCheck = params.selectOnCheck;
		}
	} 
	params = {};
	params.table_name = table_name;
	params.object_name = table_name;
	call_remote(REQUEST_TYPE1001, params, function(data) {
		var data_type = "";
		var columns = [];
		var customOpts = {
				customAttr : {
					request_type : REQUEST_TYPE1002,
					request_pram : params,
					grid_source : [],
					successCallback : successCallback
				},
				columns : columns,
				singleSelect : singleSelect,
				showFooter: true,
				pagination: pagination,
				frozenColumns: frozenColumns,
				selectOnCheck: selectOnCheck
		};
		if(colCheckbox == "Y") {
			customOpts.singleSelect = false;
			var checkfield = {}
			checkfield.field = "ck";
			checkfield.checkbox = true;
			columns.push(checkfield);
		}
		params.table_name = data.table_name;
		for (var i = 0; i < data.columns_info.length; i++) {
			var hide;
			var col = data.columns_info[i];
			if (!col.col_name_eng)
				continue;
			var eng = col.col_name_eng.toLowerCase();
			if (eng == 'guid')
				continue;
			if(col.is_fk == "Y") {
				eng += "_chs";
			}
			var caption = col.col_caption;
			var col_width = col.col_width;
			var isvisiable = col.isvisiable;
			if (isvisiable == 'Y')
				hide = false;
			else
				hide = true;
			var col_align = col.col_align;
			data_type += eng + "=" + col.data_type + ",";
			var colConfig = {
					align: col_align,
					field: eng,
					headalign: "center",
					resizable: true,
					sortable: true,
					title: caption,
					width: col_width,
					hidden : hide
			};
			if(eng == editorCol) {
				colConfig.editor = edtorType;
				colConfig.styler = colColor;
			}
			columns.push(colConfig);
		}
		params.columns = data.column_feilds;
		createDataGrid1(tableID, toolbarID, customOpts);
		if(successCallback) {
			successCallback(data.columns_info);
		}
	});
}

/**
 * 新的创建datagrid的方法
 *
 * @param tableID table的id
 * @param tool_bar 
 * @param customOpts 用户自定义的grid属性
 */
function createDataGrid1(tableID, toolbarID, customOpts) {
	var dataGrid = new defaultGrid(toolbarID, customOpts);
	var jq_grid = $('#' + tableID);
	var cacheFlag;
	if(!customOpts.customAttr)
		cacheFlag = true;
	else
		cacheFlag = (customOpts.customAttr.cacheFlag ? customOpts.customAttr.cacheFlag : true);
	dataGrid.options.onBeforeLoad = function(target, rows) {
		var datagrid = $.data(jq_grid[0], "datagrid");
		var opts = datagrid.options;
		var customAttr = opts.customAttr;
		var request_pram = customAttr.request_pram;
		var request_type = customAttr.request_type;
		var successCallback = customAttr.successCallback;
		var grid_source = customAttr.grid_source;
		var onBeforeLoadExtFun = customAttr.onBeforeLoadExtFun;//onBeforeLoad时添加的扩展方法
		if(onBeforeLoadExtFun)
			onBeforeLoadExtFun();
		if(customAttr.grid_source || !customAttr.request_type) {
			grid_source = (grid_source ? grid_source : []);
			jq_grid.datagrid('loadData', grid_source);
			if(grid_source.rows != null){
				for(var i = 0; i < grid_source.rows.length; i++){
					if(grid_source.rows[i].checkflag == '1'){
		    			 jq_grid.datagrid('selectRow',i);
		    		}
				}
			}
			customAttr.grid_source = null;
			return;
		}
		if(cacheFlag &&　request_pram) {
			jQuery.each(request_pram, function(key, val) {
				if(!target[key]) {		
					target[key] = val;
				}
			});
		}
		var pager = jq_grid.datagrid('getPager');
		var pagination = null;
		if(pager)
			pagination = pager.data("pagination");
		if(pagination) {
			var options = pagination.options;
			target.pageNumber = (options.pageNumber == 0 ? 1 : options.pageNumber);
			target.pageSize = options.pageSize;
			jq_grid.datagrid('getPager').pagination({
				pageSize : options.pageSize,
				pageNumber : options.pageNumber
			});// 重置
		}
		jq_grid.datagrid("loading"); // 加屏蔽
		call_remote(request_type, target, function(data) {
			jq_grid.datagrid('loadData', data);
			//解决有些行被勾选的情况，造成原因：因为有些表格数据由checked检查日期 这个字段 与easyui判断数据是否勾选冲突
			jq_grid.datagrid('checkAll');
			jq_grid.datagrid('clearChecked');
			jq_grid.datagrid("loaded"); // 移除屏蔽
			if(successCallback)
				successCallback(data);
		}, function (){
			jq_grid.datagrid("loaded"); // 移除屏蔽
		});
	}
	/* 
	 * 显示合计栏的时候会出现页面布局混乱的现象，先加上column创建一次，
	 * 然后加上请求类型与显示合计栏再刷新一次能避免这样的布局错乱
	 */
	if(customOpts.showFooter == true) {
		var customAttr = {};
		customAttr = customOpts.customAttr;
		dataGrid.options.customAttr = {};
		jq_grid.datagrid(dataGrid.options);
		jq_grid.datagrid({
			customAttr: customAttr,
			showFooter: true
		});
	} else {
		jq_grid.datagrid(dataGrid.options);
	}
}

/**
 * 默认的dataGrid对象

 * @param tableID table的id
 * @param tool_bar 
 * @param columns 列信息
 * @param customOpts grid属性
 */
function defaultGrid(tool_bar, customOpts) {
	this.options = {
		autoRowHeight : false,// 定义是否设置基于该行内容的行高度。设置为 false，则可以提高加载性能。
		nowrap : true, // 设置为true，当数据长度超出列宽时将会自动截取
		striped : true, // 设置为true将交替显示行背景
		fitColumns : false, // 设置为true将自动使列适应表格宽度以防止出现水平滚动
		url : null, // 后台JAVA调用路径
		loadMsg : '数据加载中，请稍后...',
		remoteSort : false, // 定义是否通过远程服务器对数据排序
		singleSelect : false, // 设置为true将只允许选择一行
		onSortColumn : function(sort, order) { /* 点击列进行排序时触发 */
			sortName = sort;
			orderBy = order;
		},
		checkOnSelect : true,
		pagination : true, //默认分页
		fit: false,//自适应大小
		selectOnCheck : true,
		rownumbers : true, // 设置为true将显示行数
		toolbar : '#' + tool_bar,
		onBeforeLoad : function(target, rows) {
			
		}
	};
	var opts = this.options;
	jQuery.each(customOpts,function(key,val) {
		if(key == "pagination") {
			if(val == undefined || val == true) {
				opts.pageSize = 10;
				opts.pageList = [ 10, 30, 50, 100, 200, 500 ];
			} else {
				opts.pagination = false;
			}
		} else if(key == "columns") {
			if(val) {
				if(val[0] instanceof Array)//多层表头，多维数组
					opts.columns = val;
				else
					opts.columns = [val];
			}
		} else {
			opts[key] = val;
		}
	});
}

/**
 * 创建没有分页的datagrid
 * 
 * @param id table的id
 * @param tool_bar
 * @param columns 列信息
 * @param request_type 请求类型
 * @param request_pram 请求参数
 * @param successCallback 取到数据返回的方法
 * @param gridSource 表格数据
 */
function createNoPageDataGrid(id, tool_bar, columns, request_type, request_pram, successCallback, gridSource) {
	createDataGrid(id, tool_bar, columns, request_type, request_pram, successCallback, gridSource, true);
}

/**
 * 创建datagrid不带列信息（页面写好）
 * 
 * @param id table的id
 * @param tool_bar
 * @param request_type 请求类型
 * @param request_pram 请求参数
 * @param successCallback 取到数据返回的方法
 * @param gridSource 表格数据
 */
function createNoColumnsDataGrid(id, tool_bar, request_type, request_pram, successCallback, gridSource, noPage) {
	createDataGrid(id, tool_bar, null, request_type, request_pram, successCallback, gridSource, noPage);
}

/**
 * 创建datagrid
 * 
 * @param id table的id
 * @param tool_bar
 * @param columns 列信息
 * @param type 请求类型
 * @param pram 请求参数
 * @param successCallback 取到数据返回的方法
 * @param gridSource 表格数据
 * @param noPage 不分页的标识，不传，默认分页
 */
function createDataGrid(id, tool_bar, columns, type, pram, successCallback, gridSource, noPage) {
	var jq_grid = $('#' + id);
	noPage = (noPage ? false : true);//默认分页
	var customOpts = {
			customAttr : {
				request_type : type,
				request_pram : pram,
				successCallback : successCallback,
				grid_source : gridSource,
			},
			columns : columns,
			pagination : noPage,
	};
	createDataGrid1(id, tool_bar, customOpts);
}

/**
 * 功能下来菜单中设置按钮功能
 * @param tablename 设置的表或视图
 */
function setup(divId, tablename) {
	createDialogWindow('字段个性化配置','../../setupt.jsp',"700px","450px");
}

/**
 * 高拍仪
 */
function createGPY() {
	GpyUtil.CreateGpyDeviceView();
}

/**
 * 远程调用方法 
 * 请求url约定为/service.yachtar
 * 请求类型约定为 JSON
 * 
 * @param request_type 请求类型对应后台的MessageBean的request_type
 * @param request_pram 查询条件
 * @param callbackFun 返回的方法名
 * @param request_data 请求数据对应后台的data
 * @returns 返回值格式约定为 1、pram;页面参数参数json格式 2、request_type;请求类型 3、data;传值json格式
 * 
 */
var remoteUrl = "http://61.160.250.164:8088/bfmis/service.yachtar";
function call_remote(request_type, request_pram, callbackFun, faultCallbackFun, request_data) {
	if(!request_data) {
		request_data = null;
	}
	if(!faultCallbackFun) {
		faultCallbackFun = this;
	}
	if(!request_pram)
		request_pram = {};
	// 当前登录用户的id固定传到后台
	request_pram.login_user = 0;
	var pram = {pram: request_pram, request_type:  request_type, data: request_data};
	remote_base(remoteUrl, pram, callbackFun, faultCallbackFun);
}

/**
 * 远程调用方法
 * 请求url约定为/service.yachtar
 * 请求类型约定为 JSON
 * 
 * @param url http URL
 * @param request_pram 查询条件
 * @param callbackFun 返回的方法名
 * @returns 返回值格式约定为 1、pram;页面参数参数json格式 2、request_type;请求类型 3、data;传值json格式
 * **outerObj 外部页面对象取最后一个参数***
 * 
 */
function remote_base(url,request_pram, callbackFun, faultCallbackFun) {
	if(!callbackFun) {
		callbackFun = function (data) {};
	}
	//外部对象
	var outerObj = arguments[arguments.length - 1];
	var msg = JSON.stringify(request_pram);
	$.ajax({
		type: "POST",
		url: url,
		data: msg,//这个是将json对象 转成 json字符串 传到后台
		success: function(data){
			if(typeof outerObj != "function" &&　outerObj && outerObj != window) {
				outerObj.ready = true;
				console.debug("request_type;" + request_pram.request_type);
			}
			if(data.error_content != null && data.error_content != "") {
				var errorStr = data.detail;
				if(errorStr == null || errorStr.trim() == "") {
					errorStr = "数据库出错，请联系管理员";
				}
				try {
					$.messager.alert("错误", errorStr, "error");
				} catch (e) {
					alert(errorStr);
				}
				if(typeof faultCallbackFun == "function")
					faultCallbackFun();
			} else {
				var result = "";
				if(data.hasOwnProperty("data"))
					result = data.data;
				else
					result = data;
				try {
					if(typeof result == "string")
						result = jQuery.parseJSON(result);
				} catch (e){
				}
				if(typeof callbackFun == "function")
					callbackFun(result);
			}
		},
		dataType: "json",
		contentType:"application/json;charset=UTF-8",
		error: function (XMLHttpRequest, textStatus, errorThrown){
			var error_info;
			try {
				error_info = jQuery.parseJSON(XMLHttpRequest.responseText).detail;
			} catch (e){
				error_info = XMLHttpRequest.responseText;
			}
			if(error_info == "") {
				error_info = "页面过期，请重新登录";
			}
			if(typeof faultCallbackFun == "function")
				faultCallbackFun();
			else
				$.messager.alert("错误", error_info, "error");
		}
	});
}

/**
 * 创建dialog弹框（新）
 * 
 * @param params 参数有
 * 1、url 弹框页面路径
 * 2、width 弹框页面宽度
 * 3、height 弹框页面高度
 * 4、buttons dialog下面的按钮组,格式:
 * 5、is_maximizable 是否显示最大化按钮
 * 6、closeHandler 关闭页面需要调用的方法
 * 7、title 弹框显示的标题
 * 8、collapsible 弹出框是否可收起，默认不可以 boolean
 * 8、shadow 显示阴影，默认显示 boolean
 * 9、customHandler 控制弹出页面与dialog页面之间通讯的方法，dialog页面处理完某些事情后会把返回值触发，并把结果传递给控制页面
 * 10、onBeforeCloseHandler 弹框关闭前触发方法
 * [{text:'Save', iconCls:'icon-save', handler:function(){ alert('save')}},
 * {text:'cancel', iconCls:'icon-cancel', handler:function(){$('#dlg').dialog('close')}}]
 * 注：一、在dialog页面用batchView = $("#gpyDiv").parent();即可取到dialog的jquery对象；
 *    二、获取用户自定义属性的方法如下：
 * var com = $.data(batchView[0], "dialog");
 * var opts = com.options;
 * var customHandler = opts.customAttr.customHandler;
 * 
 *  
 */
function createDialogWindow1(params){
	var url = params.url;
	if(!url) {
		return;
	}
	var title_str = (params.title ? params.title : "tbs");
	var collapsible = (params.collapsible ? true : false);
	var shadow = (params.shadow ? false : true);
	var width = params.width;
	var height = params.height;
	var buttons = params.buttons;
	var is_maximizable = params.is_maximizable;
	var closeHandler = params.closeHandler;
	var customHandler = params.customHandler;
	var customparams = params.params;
	var onBeforeCloseHandler = params.onBeforeCloseHandler;
	var panel = '<div style="overflow: hidden;"></div>';
	is_maximizable = (is_maximizable ? true : false);
	if(!width) {
		width = "710px";
		height = "450px";
	}
	if(buttons) {
		buttons.push({text:'退出', iconCls:'icon-cancel', handler:function(){editWin.dialog('close');}});
	}
	if(url.includes(basePath) == false) {
		var realUrl = basePath + "jumpView.yachtar?alerttype=1&menu=";
		var index = 0;
		var tmpFlag = "../";
		while(url.includes(tmpFlag)) {
			index++;
			url = url.substr(url.indexOf(tmpFlag) + 3);
		}
		if(parentView) {
			var uArr = parentView.split(".");
			for(var i = 0; i < uArr.length - index; i++) {
				if(url.includes(uArr[i])) {
					continue;
				}
				realUrl += uArr[i] + "/";
			}
		}
		url = realUrl + url;
	}
	var editWin = $(panel).dialog({
		href: url,
	    title:title_str,
	    closed: true,
	    modal: true,
	    cache: false,
	    minimizable:false,
	    maximizable:is_maximizable,	//弹出框最大化
	    collapsible: collapsible,	//弹出框收起
		width: width,
		height: height,
	    shadow: shadow,
	    buttons: buttons,
	    customAttr: {
	    	customHandler : customHandler,
	    	params : customparams
	    },
	    onClose : function() {
	    	//销毁所有的ueditor
			if($('#container').length > 0 && typeof (UE) !== "undefined"){
				UE.delEditor('container');
			}
	    	editWin.dialog('destroy');
	    	if(typeof closeHandler == "function")
	    		closeHandler();
	    },
	    onBeforeClose: function() {
	    	if(typeof onBeforeCloseHandler == "function"){
	    		var isCloseFlag = onBeforeCloseHandler();
	    		if(isCloseFlag){//onBeforeCloseHandler()返回true的话,可以阻止弹框关闭，此时可用destroy方法关闭弹框
	    			return false;
	    		}
	    	}
	    },
	});
	editWin.dialog("open");
	$("a").keydown(function(e){
		this.blur();
	});
	return editWin;
}

/**
 * 新增(修改)等弹框触发的方法,本身带有退出按钮，如果想在执行某些操作后主动关闭弹框，需要自己取得dialog对象，
 * 方法返回值即为dialog对象
 * 
 * @param title_str 弹框显示的标题
 * @param popupUrl 弹框页面路径
 * @param width 弹框页面宽度
 * @param height 弹框页面高度
 * @param buttons dialog下面的按钮组,格式:
 * @param is_maximizable 是否显示最大化按钮
 * @param closeHandler 关闭页面需要调用的方法
 * [{text:'Save', iconCls:'icon-save', handler:function(){ alert('save')}},
 * {text:'cancel', iconCls:'icon-cancel', handler:function(){$('#dlg').dialog('close')}}]
 * @returns {Number} 返回当前弹框在所有弹框里面的索引
 *  
 */
function createDialogWindow(title_str, popupUrl, width, height, buttons,is_maximizable,closeHandler,onBeforeCloseHandler){
	var params = {
			title: title_str,
			url: popupUrl,
			width: width,
			height: height,
			buttons: buttons,
			is_maximizable: is_maximizable,
			closeHandler: closeHandler,
			onBeforeCloseHandler : onBeforeCloseHandler
	}
	return createDialogWindow1(params);;
}

/**
 * 设置表格样式
 * @param tableID:table给件的ID,
 * @param toolbarID:与table关联的toolbar组件的ID,
 * @param tableName:要查询的表名
 * @param params:查询的条件
 * @param gridSource:页面设置的数据源，如果有就不执行查询
 */
function columnSetup(tableID, toolbarID, table_name, params,gridSource) {
	columnSetup1({table_name:table_name,closePopWinHandler:function() {
		CreateDBGrid(tableID, toolbarID, table_name, params);
	}});
}

/**
 * 设置表格样式
 * @param params:页面设置的参数
 * 	1、table_name 表名（如果有就传入）
 * 	2、grid_source:页面设置的数据源（如果有就传入）
 * 	3、closePopWinHandler:关闭设置弹框需要调用的方法（如果有就传入）
 */
function columnSetup1(params) {
	var total_type = [
	                  {value:TOTAL_TYPE0, text:"无汇总项"}, 
	                  {value:TOTAL_TYPE1, text:"数值累计"}, 
	                  {value:TOTAL_TYPE2, text:"取平均数"}, 
	                  {value:TOTAL_TYPE3, text:"个数累计"},
	                  /*{value:TOTAL_TYPE4, text:"指定字段值"},*/
	                  {value:TOTAL_TYPE5, text:"静态文本"}
	                  ];
	var align_type = [
	                  {value:ALIGN_TYPE0, text:"靠左排放"}, 
	                  {value:ALIGN_TYPE1, text:"靠右排放"}, 
	                  {value:ALIGN_TYPE2, text:"居中排放"}
	                  ];
	var columns = [
	               {field:'guid', title:'GUID', checkbox:true},
	               {field:'col_name_chs', title:'字段名称', width:120, align:'left', headalign:'center', sortable:true, resizable:true},
	               {field:'col_caption', title:'显示名称', width:120, align:'left', headalign:'center', sortable:true, resizable:true, editor:'textbox'},
	               {field:'istotal', title:'是否汇总', width:80, align:'center', resizable:true, headalign:'center', editor:{type:'checkbox', options:{on:'Y', off:'N'}}},
	               {field:'isvisiable', title:'是否可见', width:80, align:'center', resizable:true, headalign:'center',
	            	   editor:{type:'checkbox', options:{on:'Y', off:'N'}}},
	            	   {field:'col_width', title:'字段列宽度', width:80, align:'right', sortable:true, headalign:'center', resizable:true, editor:'numberbox'},
	            	   {field:'sortindex', title:'显示次序', width:80, align:'right', sortable:true, resizable:true, headalign:'center', editor:'numberbox'},
	            	   {field:'isneeded_sys', title:'是否系统必填', width:80, align:'center', resizable:true, headalign:'center'},
	            	   {field:'isneeded_set', title:'是否用户必填', width:80, align:'center', resizable:true, headalign:'center',
	            		   editor:{type:'checkbox', options:{on:'Y', off:'N'}}},
	            		   {field:'col_query_type', title:'汇总类型', width:80, align:'right', sortable:true, resizable:true, headalign:'center',
	            			   editor:{type:'combobox', options:{data:total_type, valueField:"value", textField:"text"}}, formatter: function(value, row) {
	            				   return TOTAL_TYPE_MAP[value];
	            			   }},
	            			   {field:'col_query_value', title:'文本内容', width:80, align:'right', sortable:true, resizable:true, headalign:'center', editor:'textbox'},
	            			   {field:'col_align', title:'显示位置', width:80, align:'right', sortable:true, resizable:true, headalign:'center',
	            				   editor:{type:'combobox', options:{data:align_type, valueField:"value", textField:"text"}}, formatter: function(value, row) {
	            					   return ALIGN_TYPE_MAP[value];
	            				   }},
	            				   ];
	tableName = params.table_name;
	var editWin = createDialogWindow("设置表格样式", basePath + "pubframe/setup/col_setup.html", 600, 400,null,true,function() {
		if(typeof params.closePopWinHandler == "function")
			params.closePopWinHandler();
	});
	editWin.ready(function() {
		setTimeout(function() {
			var customOpts;
			if(params.hasOwnProperty("table_name")){
				customOpts = {
						customAttr : {
							request_type : REQUEST_TYPE1003,
							request_pram : {table_name: params.table_name},
							grid_source : params.grid_source
						},
						columns : columns,
						singleSelect : false,
						showFooter: true,
						pagination: false
				};
			} else {
				customOpts = {
						customAttr : {
							grid_source : params.grid_source
						},
						columns : columns,
						singleSelect : false,
						showFooter: true,
						pagination: false
				};
			}
			createDataGrid1("field_grid", "tb_setup", customOpts);
		}, 100);
	});
}

/**
 * 编辑页面中编辑字段属性的加载-根据表名和当前用户获取其个性化配置
 * 
 * @param tableName 编辑页面对应的表名
 */
function initEditForm(tableName,viewInfo){
	call_remote(REQUEST_TYPE1007, {table_name:tableName},function(retData){
		editData = retData;
		if(retData.length > 0){
			for(var i=0; i<retData.length;i++){
				var colName = retData[i].col_name_eng;
				var document_ta = colName + "_TA";
				var colDocument = document.getElementById(colName);
				var colTaDocument = document.getElementById(document_ta);
				if(colTaDocument) {
					var houseparm_Class = colTaDocument.className;
				}
				if(colDocument) {
					colDocument.innerHTML = retData[i].col_caption;
				}
				var documentId = "#" + document_ta;
				var element = document.getElementById(document_ta);
				if(element){
					if(retData[i].isvisiable == 'Y'){	// 该字段是否显示
						if(retData[i].isneeded_set == 'Y'){	//该字段是否必填
							if (houseparm_Class.indexOf("easyui-combobox") >= 0) {
								$(documentId).combobox({required : true});
							} else if(houseparm_Class.indexOf("easyui-datebox") >= 0) {
								$(documentId).datebox({required : true});
							} else {
								$(documentId).textbox({required : true , missingMessage : '该输入项为必填项'});
							}
						}
					} else {
						//$("#" + document).css("display","none");//errors, don't know how to add this code. wxm
						$("#" + document_ta).css("display","none");
					}
				}
				if(viewInfo && houseparm_Class) {
					if (houseparm_Class.indexOf("easyui-combobox") >= 0) {
						$(documentId).combobox("select",viewInfo[colName.toLocaleLowerCase()]);
					} else if(houseparm_Class.indexOf("easyui-datebox") >= 0) {
						$(documentId).datebox("setValue",viewInfo[colName.toLocaleLowerCase()]);
					} else {
						$(documentId).textbox("setText",viewInfo[colName.toLocaleLowerCase()]);
					}
				}
			}
		}
	});
}

/**
 * 编辑页面中编辑字段属性的加载-根据表名和当前用户获取其个性化配置
 * 
 * @param tableName 编辑页面对应的表名
 * @param stepBackFun 分部调用返回方法
 */
function EditFormSave(editData,stepBackFun){
	var params = {};
	if(editData.length > 0){	
		for(var i=0; i<editData.length;i++){
			var element = document.getElementById(editData[i].col_name_eng+"_TA");
			if(element){
				var edittype;
				var eleClassname = document.getElementById(editData[i].col_name_eng+"_TA").className;
				if(eleClassname.indexOf("easyui-numberbox")>=0){
					edittype = '2';
				}else if(eleClassname.indexOf("easyui-datebox")>=0){
					edittype = '3';
				}else if(eleClassname.indexOf("easyui-combobox")>=0){
					edittype = '4';
				}else
					edittype = '1';
				switch(parseInt(edittype)){
					case 1:params[editData[i].col_name_eng.toLowerCase()] = $("#"+editData[i].col_name_eng+"_TA").textbox('getText'); break;
					case 2:params[editData[i].col_name_eng.toLowerCase()] = $("#"+editData[i].col_name_eng+"_TA").textbox('getText'); break;
					case 3:params[editData[i].col_name_eng.toLowerCase()] = $("#"+editData[i].col_name_eng+"_TA").datebox('getValue'); break;
					case 4:params[editData[i].col_name_eng.toLowerCase()] = $("#"+editData[i].col_name_eng+"_TA").combobox('getValue'); break;
				}
				if(editData[i].isvisiable == 'Y' && editData[i].isneeded_set == 'Y'){
					//用val()直接取值取不到属性为required：true的combobox的值
					//if($("#"+editData[i].col_name_eng+"_TA").val() == null || $("#"+editData[i].col_name_eng+"_TA").val() == ''){
					if(params[editData[i].col_name_eng.toLowerCase()] == null || params[editData[i].col_name_eng.toLowerCase()] == ''){
						$.messager.alert("错误", editData[i].col_caption+"不能为空！","error");
						if(typeof stepBackFun == "function")
							stepBackFun(editData[i].col_name_eng);
						return;
					}
				}
			}
		}
	}
	return params;
}

/**
 * 行政区域字段下拉框数据加载
 * @param id
 */
function sectionLoad(id,successCallback){
	call_remote(REQUEST_TYPE1006, {},function(data){
		$("#" + id).combobox('loadData',data);
		if(successCallback)
			successCallback(data);
	},this);
}
/**
 * 银行编号下拉数据框
 */
function BankidLoad(id){
	call_remote(REQUEST_TYPE1040, {},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 小区字段下拉框数据加载
 * @param id
 */
function villageLoad(id,sectionid,successCallback){
	call_remote(REQUEST_TYPE1014, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
		if(successCallback)
			successCallback(data);
	},this);
}

/**
 * 街道办事处字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function streetLoad(id,sectionid){
	call_remote(REQUEST_TYPE1009, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 建设单位字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function buildunitLoad(id,sectionid){
	call_remote(REQUEST_TYPE1010, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 业委会字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function ownercommitteeLoad(id,sectionid){
	call_remote(REQUEST_TYPE1011, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 物管公司字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function servicerLoad(id,sectionid){
	call_remote(REQUEST_TYPE1012, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 居委会字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function livecommitteeLoad(id,sectionid){
	call_remote(REQUEST_TYPE1013, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 售房单位字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function sellerLoad(id,sectionid){
	call_remote(REQUEST_TYPE1025, {sectionid:sectionid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

/**
 * 常量字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 行政区域ID
 */
function ConstantLoad(id,constantId,successCallback){
	call_remote(REQUEST_TYPE1016, {constantcategoryid:constantId},function(data){
		$("#" + id).combobox('loadData',data);
		if(successCallback)
			successCallback(data);
	},this);
}

/**
 * 常量字段下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 用户ID
 */
function UsersLoad(id,userId){
	call_remote(REQUEST_TYPE1023, {userid:userId},function(data){
		var a = {};
		var b = new Array();
		for(var i= 0 ;i<data.length;i++){
			a = {};
			a = data[i];
			b.push(a);
		}
		$("#" + id).combobox('loadData',b);
	},this);
}
/**
 * 业务名称下拉框数据加载
 * @param id 编辑字段ID
 * @param sectionid 用户ID
 */
function BusinessesLoad(id,businesscategoryid){
	call_remote(REQUEST_TYPE1043, {businesscategoryid : businesscategoryid},function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}

function bankRateLoad(id){
	call_remote(REQUEST_TYPE84, {}, function(data){
		$("#" + id).combobox('loadData',data);
	},this);
}
/**
 * 查询所有单位下拉框数据来源（含区域等）
 * @param comboboxid 下拉框id
 */
function unitSumLoad(comboboxid) {
	call_remote(REQUEST_TYPE202, {}, function(data){
		$("#" + comboboxid).combobox('loadData',data);
	},this);
}

/**
 * 恢复用户个性化配置 
 * @param tableName 编辑页面对应的表名
 */
function recover(tableName){
	 $.messager.confirm('恢复设置','恢复默认设置不可逆，确认恢复默认设置吗？',function(flag){
		if (!flag) return;
		call_remote(REQUEST_TYPE1008, {table_name:tableName},function(retData){
			if(retData == 'success')
				$.messager.alert("提示", "已恢复默认设置！");
			else
				$.messager.alert("错误", "已恢复默认设置！",'请联系管理员！');
		});
	 });
}

//时间戳转换为时间格式
function formatDatebox(value) {
	if(value !=null && value != ''){
		var date= new Date(value);   
	    var year=date.getYear()+1900;     
	    var month=date.getMonth()+1; 
	    if(month<10)
	    	month = '0'+month;
	    var date=date.getDate();    
	    if(date<10)
	    	date = '0'+date;
	    return  year+"-"+month+"-"+date;
	}else{
		return "";
	}  
}
//时间戳转换为时间格式1
function formatDatebox1(value) {
	 var date = new Date(value);
     var year = date.getFullYear().toString();
     var month = (date.getMonth() + 1);
     var day = date.getDate().toString();
     var hour = date.getHours().toString();
     var minutes = date.getMinutes().toString();
     var seconds = date.getSeconds().toString();
     if (month < 10) {
         month = "0" + month;
     }
     if (day < 10) {
         day = "0" + day;
     }
     if (hour < 10) {
         hour = "0" + hour;
     }
     if (minutes < 10) {
         minutes = "0" + minutes;
     }
     if (seconds < 10) {
         seconds = "0" + seconds;
     }
     return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds;
}

/**
 * 文档上传
 * @param filepagedetail 具体文件对象
 * //{id : detailId, pageid : pageid, pageno : pageno, updatedby : updatedby, exttype : exttype,is_export : true,is_txtexp : true};
 * {id : detailId, pageid : pageid, pageno : pageno, updatedby : updatedby, uploadtype : 1};
 * uploadtype 上传种类 constants.js中定义的常量
 * @param fileElementId  文件name属性 数组类型 例：<input type="file" id="up" accept="application/vnd.ms-excel" name="pic"/>值为：["pic"]
 * @param successCallback  成功返回的方法
 */
function documentsUpload(filepagedetail, fileElementId, successCallback) {
	$.ajax({
		type: "POST",
        url: basePath + "sessionAttribute.yachtar",
        data: JSON.stringify({filepagedetail : filepagedetail}),
        success: function(data){
        	$.ajaxFileUpload({ 
        		url: basePath + "documents_upload.yachtar",// 用于文件上传的服务器端请求的Action地址
        		type:"POST",// 请求方法
        		secureuri : false,// 一般设置为false
        		fileElementId: fileElementId,
        		dataType:"JSON",// 返回值类型 一般设置为json,一定要大写,否则可能会出现一些bug
        		success:function(msg) {
        			var url = basePath + "documents_img.yachtar?id=" + filepagedetail.id + "&pageid=" + filepagedetail.pageid + "&" + Math.floor(Math.random()*100);
        			$('input[name="fileElementId"]').attr('src', url);
        			if(successCallback){
        				successCallback(msg);
        			}
        			
        		}
        	});
        },
        dataType: "JSON",
        contentType:"application/json;charset=UTF-8",
        error: function (XMLHttpRequest, textStatus, errorThrown){
        	var error_info;
        	try {
        		error_info = jQuery.parseJSON(XMLHttpRequest.responseText).detail;
        	} catch (e){
        		error_info = XMLHttpRequest.responseText;
        	}
        	$.messager.alert("错误", error_info, "error");
        }
    });
}

/**
 * 文档下载
 * @param real_name 文件的真实路径
 * @param store_name 希望下载的文件名
 * @param successCallback  成功返回的方法
 */
function documentsDownload(real_name, store_name, successCallback) {
	$.fileDownload(basePath + "documents_download.yachtar", {
		httpMethod : 'POST',
		popupWindowTitle : "初始化下载......",
		data: {real_name: real_name, store_name: store_name},
		successCallback : function(url) {
			if(successCallback)
				successCallback(msg);
		},
		failCallback : function(html, url) {
		}
	});
}

/**lodop工具,打印和导出EXCEL功能*/
var LodopUtil = (function() {
	var LODOP;
	function gridHtml(grid) {
		var div_jq = $("#" + grid).parent();
		var header = div_jq.find(".datagrid-view2").find(".datagrid-header").find(".datagrid-htable").html();
		header = header.replace("tbody","thead");
		var body = div_jq.find(".datagrid-view2").find(".datagrid-body").find(".datagrid-btable").html();
		var tableString = '<table>\n'
			+ header
			+ body
			+ "</table>";
		var strBodyStyle = "<style>table,td { border: 1 solid #000000;border-collapse:collapse } thead{ font-weight:bold; }</style>"
			+ "<link href='easyui/themes/default/easyui.css' type='text/css' rel='stylesheet'>";
		var strFormHtml = strBodyStyle + "<body>" + tableString + "</body>";
		return strFormHtml;
	}
	/**
	 * 导出excel
	 * @param grid grid ID
	 * @param file_name 下载的文件名
	 * @param successCallback  成功返回的方法
	 */
	function exportExc(grid, file_name, successCallback) {
//		var strFormHtml = gridHtml(grid);
//		LODOP = getLodop();
//		LODOP.PRINT_INIT("");
//		LODOP.ADD_PRINT_TABLE(100, 20, 500, 80, strFormHtml);
//		LODOP.SET_SAVE_MODE("Orientation", 2); //Excel文件的页面设置：横向打印   1-纵向,2-横向;
//		LODOP.SET_SAVE_MODE("PaperSize", 9); //Excel文件的页面设置：纸张大小   9-对应A4
//		LODOP.SET_SAVE_MODE("Zoom", 90); //Excel文件的页面设置：缩放比例
//		LODOP.SET_SAVE_MODE("CenterHorizontally", true);//Excel文件的页面设置：页面水平居中
//		LODOP.SET_SAVE_MODE("CenterVertically", true); //Excel文件的页面设置：页面垂直居中
//		LODOP.SAVE_TO_FILE(file_name + ".xls");
//		var file_data = $('#' + grid).datagrid('getExcelXml', { title: file_name});
//		$.fileDownload(basePath + "exportExcel.yachtar", {
//			httpMethod : 'POST',
//			popupWindowTitle : "初始化下载......",
//			data: {file_name: file_name + ".xls", file_data: file_data},
//			successCallback : function(url) {
//				if(successCallback)
//					successCallback(msg);
//			},
//			failCallback : function(html, url) {
//			}
//		});
//		if(successCallback)
//			successCallback(msg);
		Grid2Excel.exportExcel(grid, file_name,file_name,successCallback);
	}
	/**
	 * @param strPrintName 打印任务名
	 * @param printDatagrid 要打印的datagrid
	 */
	function print(strPrintName, printDatagrid) {
		var strFormHtml = gridHtml(printDatagrid);
		LODOP = getLodop();
		LODOP.PRINT_INIT(strPrintName);
		LODOP.SET_PRINT_PAGESIZE(2,"","",""); //页面设置：横向打印   1-纵向,2-横向;
		//LODOP.SET_PRINT_MODE("PRINT_PAGE_PERCENT","Auto-Width");
		LODOP.ADD_PRINT_TABLE(10, 10, "100%", "100%", strFormHtml);
		LODOP.PREVIEW();
	}
	return {exportExc: function(grid, file_name, successCallback) {
			exportExc(grid, file_name, successCallback);
		},
		print :  function(strPrintName, printDatagrid) {
			print(strPrintName, printDatagrid);
		}
	}
}());

/**
 * 获取文档图片
 * @param img 显示图片的img组件
 * @param fileName 下载文件名
 * @param detailId 文档id
 */
function getDocumentsImg (img, id,pageid){
	var url = basePath + "documents_img.yachtar?id=" + id + "&pageid=" + pageid + "&" + Math.floor(Math.random()*100);
	$("#" + img).attr('src', url);
}

/**
 * 页面功能按钮组
 * @param grid 需要导出的grid列表id
 * @param tb grid的toolbar id,设置完成后需要刷新并重新生成表格
 * @param tableName 需要设置样式的表名
 * @param params 设置完成后需要刷新并重新生成表格，需要查询的sql条件
 * @param loctype 定位查询的类型
 * @param confirmHandler 定位功能点确定按钮触发的方法
 * @param printName 打印任务或者导出Excel的名称
 * @param index 页面出现功能按钮的次数，可不传
 * 
 */
function setPubBtns(grid,tb,tableName,params,printName,loctype,confirmHandler,index) {
	index = (!index ? "" : index);
	var btnLayout = "	<div id=\"search" + index + "\" data-options=\"iconCls:'icon-search',plain:false\" >查询</div>"
		+ "	<div id=\"exportdbgrid" + index + "\" data-options=\"iconCls:'icon-menu-sjzd'\" >导出Excel</div>"
		+ "	<div id=\"printdbgrid" + index + "\" data-options=\"iconCls:'icon-print'\" >打印表格</div>"
		+ "	<div id=\"setupBtn" + index + "\" data-options=\"iconCls:'icon-menu-xtsz'\" >设置</div>"
		+ "</div>";
	if(loctype) {
		btnLayout = "	<div id=\"location" + index + "\" data-options=\"iconCls:'icon-lock',plain:false\" >定位</div>" + btnLayout;
	}
	btnLayout = "<div id=\"mm" + index + "\" style=\"width:100px;\">" + btnLayout;
	document.write(btnLayout);
	$("#mm" + index).ready(function() {
		$("#search" + index).click(function(event) {dosearch(tableName, grid)});
		$("#location" + index).click(function(event) {createLocation(tableName, loctype,confirmHandler)});
		$("#exportdbgrid" + index).click(function(event) {LodopUtil.exportExc(grid, printName)});
		$("#printdbgrid" + index).click(function(event) {LodopUtil.print(printName,grid)});
		$("#setupBtn" + index).click(function(event) {columnSetup(grid, tb,tableName,params)});
	});
}

/**
 * 金额大写转换函数
 * @param money 金额
 * @returns
 */
function DX(money) {
	if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(money))
		return "数据非法";
	var unit = "千百拾亿千百拾万千百拾元角分", str = "";
	money += "00";
	var p = money.indexOf('.');
	if (p >= 0)
		money = money.substring(0, p) + money.substr(p + 1, 2);
	unit = unit.substr(unit.length - money.length);
	for (var i = 0; i < money.length; i++)
		str += '零壹贰叁肆伍陆柒捌玖'.charAt(money.charAt(i)) + unit.charAt(i);
	return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(
			/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(
			/^元零?|零分/g, "").replace(/元$/g, "元整");
}

/*DataGrid行编辑供方法*/

/**
 * 新增一行数据
 *@param tableId-datagrid的ID
 *@param addData-新增行的列字段
 * 
 */
function DataGridAddRows(tableId,addData){
	var gridData = $("#" + tableId).datagrid("getRows");
	var index = gridData.length + 1;
	$("#" + tableId).datagrid("insertRow",{
		index: index,
		row: addData
	});
	$("#" + tableId).datagrid("beginEdit", index - 1);
	$("#" + tableId).datagrid("selectRow", index);
}

/**
 * 开始/结束编辑，保存时触发
 * @param tableId-datagrid的ID
 * @param flag开始或者结束编辑标志
 */
function endEdit(tableId, flag){
	var rows = $("#" + tableId).datagrid("getRows");
	for(var i = 0; i < rows.length; i++){
		if(flag) {
			$("#" + tableId).datagrid("beginEdit", i);
		} else {			
			$("#" + tableId).datagrid("endEdit", i);
		}
	}
}

/**
 * 创建档案管理功能下-档案文件table页中-文档档案管理-文件列表树形菜单
 * @param divId 对应档案文件table页下文件档案管理div的id，传入时加引号
 * @param pk_id 对应信息表被选中那一行的id
 * @param handler 对应公共方法createFileTree从页面js代码中调取的方法，传入时加引号
 * 调用示例：
 * $("#dg").datagrid({
 *	onSelect : function(rowIndex,rowData){
 *		var pk_id = rowData.unitid;
 *		createFileTree("file_div", pk_id, "dofile");
 *		}
 * });
 */
function createFileTree(divId, pk_id, handler){
	var htmlstr = document.getElementById(divId).innerHTML;
	var parentId = null;
	var pageid = null;
	document.getElementById(divId).innerHTML = "<div class=\"easyui-layout\" data-options=\"fit:true\" style=\"width:100%;height:auto;\">"
		+ " <div data-options=\"region:'center'\" style=\"width:100%;height:100%;overflow-x:hidden;\">"
		+ "  <div class=\"datagrid-toolbar\" style=\"width:100%;height:30px;\">"
		+ "	  <a href=\"javascript:void(0)\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-menu-wjgl',plain:false\" onclick=\"" + handler + "()\">文档管理</a>"
		+ "  </div>"
		+ "  <table id=\"tree_file\" class=\"easyui-tree\" width=\"100%\" height=\"130\"></table>"
		+ " </div>"
		+ " <div id=\"img_div\" class=\"zoom\" data-options=\"region:'east',split:true,collapsible:false\" style=\"width:360px;height:100%;overflow-x:hidden;text-align: center;display:table-cell;vertical-align:middle;\">"
		+ "  <img id=\"ImgPr_pub\" width=\"200\" height=\"200\" />"
		+ " </div>"
		+ "</div>";
	$.parser.parse("#" + divId);
//	if(htmlstr.length == 0){
//	} else {
//		parentId = null;
//		pageid = null;
//		$("#ImgPr_pub").attr('src', "");
//	}
	fileTreePreviewHandler("ImgPr_pub","tree_file",pk_id,false,null,"img_div");
}
/**
 * 文档树、预览图片处理方法
 * @param preview_img 预览图片ID
 * @param tree_file 文档树ID
 * @param pk_id 数据主键ID
 * @param is_edit 是否开启文档树编辑
 * @param img_div 是否开启文档树编辑
 */
function fileTreePreviewHandler(preview_img,tree_file,pk_id,is_edit,treeClickHandler,img_div) {
	var jq_img = $("#" + preview_img);
	var jq_img_div = undefined;
	if(img_div)
		jq_img_div = $("#" + img_div);
	var jq_tree = $("#" + tree_file);
	var hasImg = false;
	jq_img.load(function() {
		hasImg = true;
		MaskUtil.unmask();
//		if(jq_img_div)
//			jq_img_div.zoom();
	}).error(function() {
		hasImg = false;
		MaskUtil.unmask();
	});
	var treeAttribute = {
		data: treedata,
		formatter : function(node){
			var s = node.text;
			var text = "";
			if(node.flag == "0") {
				if(node.children) {
					var childrenTotal = 0;
					for (var i = 0; i < node.children.length; i++) {
						if(node.children[i].children) {
							childrenTotal += node.children[i].children.length;
						}
					}
					text = node.children.length + '个文件，共' + childrenTotal + '页';
				}
			} else {
				if(node.children)
					text = node.children.length + '页';
			}
			if (text.length > 0){
				s += ' <span style=\'color:blue\'>(' + text + ')</span>';
			}
			return s;
		},
		onSelect : function(row) {
			if(row.flag == "2") {
				getDocumentsImg(preview_img, row.parentId,row.pageid);
				parentId = row.parentId;
				pageid = row.pageid;
				MaskUtil.mask();
			} else {
				parentId = null;
				pageid = null;
				jq_img.attr('src', "");
			}
			if(typeof treeClickHandler == "function") {
				treeClickHandler(row.flag);
			}
		}
	};
	if(is_edit) {
		var targetEdit = null;
		treeAttribute.onDblClick = function(row) {
			if(row.flag == "1") {
				targetEdit = row;
				$(this).tree('beginEdit',row.target);
			}
		};
		treeAttribute.onAfterEdit = function() {
			call_remote(REQUEST_TYPE1020, {id : targetEdit.id, filename : targetEdit.text, key1 : pk_id});
		};
	}
	call_remote(REQUEST_TYPE1015,{key1:pk_id},function(data){
		treeAttribute.data = data;
		jq_tree.tree(treeAttribute);
	});
	jq_img.click(function() {
		if(!hasImg)
			return;
		var panel = "<div style=\"width:100%;height:100%;overflow:auto;\"><img id=\"Img_preview\" /></div>";
		var editWin = $(panel).dialog({
			title:"图片预览",
			closed: true,
			modal: true,
			cache: false,
			minimizable:false,
			maximizable:true,	//弹出框最大化
			collapsible:false,	//弹出框收起
			width: "700px",
			height: "400px",
			shadow: false,
			onClose : function() {
				editWin.dialog('destroy');
			}
		});
		$("#Img_preview").ready(function() {
			getDocumentsImg("Img_preview", parentId,pageid);
		});
		editWin.dialog("open");
	});
}

/**
 * 开启datagrid编辑模式
 * @param gridId datagrid的ID
 */
function BeginGridEdit(dg) {
	var grid = $("#" + dg);
	var selectedDatas = grid.datagrid("getSelections");
	if(selectedDatas.length == 0){
		$.messager.alert("错误", "请先选择要修改的条目","error");
	} else {
		MaskUtil.mask();
		var index = 0;
		var dataSize = selectedDatas.length;
		var indexArr = [];
		for(var i = 0; i < dataSize; i++) {
			indexArr.push(grid.datagrid("getRowIndex",selectedDatas[i]));
		}
		var int = self.setInterval(function() {
			if(index < dataSize) {
				grid.datagrid("beginEdit", indexArr[index]);
				index++;
			} else {
				window.clearInterval(int);
				MaskUtil.unmask();
			}
		}, 10);
	}
}

/**
 * 设置元素属性值（或监听方法）
 * @param element 元素对象id (自带#号或者.)
 * @param document_type 元素对象类型 combobox，datagrid
 * @param attrName 属性名称，可以是属性值，或者简单名称
 * @param val 预设置的值，可以是对象或者函数
 */
function setElementAttr(element,document_type,attrName,val) {
	var options = undefined;
	try{
		options = $(element)[document_type]("options");
		options[attrName] = val;
	} catch(e){};
}

//删除左右两端的空格
function trim(str){ 
    return str.replace(/(^\s*)|(\s*$)/g, "");
}

/**
 * 打开查询弹框
 * @param tableName 表英文名
 * @param tableId 表所对应datagrid的ID（如果不传,默认是"dg")
 * @param tablename_chs 表中文名（如不需要显示表中文名可不传)
 */
function dosearch(tableName, tableId, tablename_chs) {
	querytablename = tableName;
	querydatagridId = tableId;
	var biaoti = "";
	if(tablename_chs == undefined || tablename_chs == null || tablename_chs == "") {
		biaoti = "查询";
	} else {
		biaoti = tablename_chs + "查询";
	}
	searcheditWin = createDialogWindow(biaoti, basePath + "pubframe/search/query.html", "312", "450");
	searcheditWin.dialog('resize', {left : 230});
}
/**
 * 新增、修改时表中某字段记录不可重复校验
 * @param inputId 需要校验的输入框id
 * @param tableName 表名
 * 例如 ： nameunrepeatable("UNITNAME_TA", tableName);
 */
function nameUnrepeatable(inputId, tableName) {
	var inputclassname = document.getElementById(inputId).className;
	if(inputclassname = "textbox easyui-validatebox") {
		$("#" + inputId).textbox({missingMessage : '该输入项为必输项'});
	}
	call_remote(REQUEST_TYPE801, {tableName : tableName}, function (data) {
		dataList = data;
	});
	$("#" + inputId).textbox({
		onChange : function (newValue, oldValue) {
			if(inputId == "UNITNAME_TA") {
				var pingyin = makePy(newValue);
				$("#IMEPINYIN_TA").textbox("setValue", pingyin[0]);//生成拼音码
			}
			if (newValue != "") {
				checkUnitname(inputId, dataList);
			}
		}
	});
}

/**
 * 保存前判断单位名称是否重复
 * @param inputId 需要校验的输入框id
 * @param dataList 当前表所有记录缓存
 * 例如 ： checkUnitname("UNITNAME_TA", dataList);
 */
function checkUnitname(inputId, dataList) {
	var flag = true;
	if(inputId == "UNITNAME_TA") {
		var currunitid = $("#UNITID_TA").textbox("getText");
		var currunitname = $("#UNITNAME_TA").textbox("getText");
		for (var i = 0; i < dataList.length; i++) {
			if(dataList[i].UNITNAME == currunitname && dataList[i].UNITID != currunitid) {
				flag = false;
				$.messager.alert("错误", currunitname + " 已经存在！请重新输入！", "error");
				$("#" + inputId).textbox("clear");
				$("#IMEPINYIN_TA").textbox("clear");
				break;
			}
		}
	}
	return flag;
}

/**
 * 多函数处理工具,应用于加载页面时需要加载很多的下拉数据源，所有才能执行页面的初始化操作的情况。
 * 第一个参数为所有函数都加载成功时的返回函数，
 * 后面一个为页面需要调用方法的数组格式为
 * {fun：方法名,args:参数数组，有几个参数，则数组长度为几个，按顺序摆放}
 * FunctionsUtil.callAsyFunctions((successCallback, [{fun:Class2,args:["cbd"]},{fun:Class3,args:["abc"]},{fun:Class1,args:["111","12321","dsfasdf"]}])
 */
var FunctionsUtil = (function() {
	function callAsyFunctions() {
		var callback = arguments[0];
		var oliviaMap = [];
		var functions = arguments[1];
		for (var i = 0; i < functions.length; i++) {
			var fun = functions[i].fun;
			var args = functions[i].args;
			if (typeof fun == "function") {
				var olivia = {};
				olivia.ready = false;
				fun.apply(olivia,args);
				oliviaMap.push(olivia);
			}
		}
		//开启定时器
		var checkTimer = setInterval(function() {
			for(var j = 0; j < oliviaMap.length; j++) {
				var olivia = oliviaMap[j];
				if(!olivia.ready) {
					return;
				}
			}
			window.clearInterval(checkTimer);
			if(callback)
				callback();
		}, 100);
	}
	return {callAsyFunctions: function(callback) {
		var atgs = [];
		for (var i = 0; i < arguments.length; i++) {
			atgs.push(arguments[i]);
		}
		callAsyFunctions.apply(this,atgs);
	}}
}());

/**
 * 按照过滤条件对grid进行过滤
 * @param gridid 
 * @param filterMap 过滤条件，如果清空的情况下则传空或者undefined
 * @param gridSource grid数据源
 * 
 */
function filterPubfun(gridid, filterMap, gridSource) {
	var backSources = [];
	if(filterMap && gridSource) {
		var tmpSource;
		if(gridSource.hasOwnProperty("rows")) {
			tmpSource = gridSource.rows;
		} else {
			tmpSource = gridSource;
		}
		for(var i = 0; i < tmpSource.length; i++) {
			var obj = tmpSource[i];
			var flag = true;
			$.each(filterMap, function(key, value) {
				if(obj[key] != filterMap[key]) {
					flag = false;
					return false;
				}
			});
			if(flag) {
				backSources.push(obj);
			}
		}
	} else {
		backSources = gridSource;
	}
	var datagridObj = $("#" + gridid).datagrid('options');
	var tableName = datagridObj.customAttr.request_pram.object_name;
	$("#" + gridid).datagrid("loadData", backSources);
	call_remote(REQUEST_TYPE228, {loginuserid : 0, object_name : tableName, dataList : backSources}, function(data) {
		$("#" + gridid).datagrid('reloadFooter',data);//重新加载底部行刷新
	});
}

/**
 * 18位身份证号码合法性验证
 * @param cid 传入身份证号
 * @returns
 */
function isCnNewID(cid){  
    var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子  
    var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码  
    if(/^\d{17}\d|x$/i.test(cid)){    
        var sum = 0, idx;    
        for(var i = 0; i < cid.length - 1; i++){    
            // 对前17位数字与权值乘积求和    
            sum += parseInt(cid.substr(i, 1), 10) * arrExp[i];    
        }  
        // 计算模（固定算法）  
        idx = sum % 11;  
        // 检验第18为是否与校验码相等  
        return arrValid[idx] == cid.substr(17, 1).toUpperCase();  
    }else{  
        return false;  
    }  
}

/**
 * 根据当前时间生成字符串
 * 例如二零一六年一月一日六点五十八分三十秒五百毫秒20160101065830500
 * @returns {String}
 */
function getCurrDateString() {
	var curr_time = new Date();
	var n = curr_time.getFullYear().toString();
	var y = (curr_time.getMonth() + 1).toString();
	if(y.length == 1) {
		y = "0" + y;
	}
	var r = curr_time.getDate().toString();
	if(r.length == 1) {
		r = "0" + r;
	}
	var s = curr_time.getHours().toString();
	if(s.length == 1) {
		s = "0" + s;
	}
	var f = curr_time.getMinutes().toString();
	if(f.length == 1) {
		f = "0" + f;
	}
	var m = curr_time.getSeconds().toString();
	if(m.length == 1) {
		m = "0" + m;
	}
	var h = curr_time.getMilliseconds().toString();
	if(h.length == 1) {
		h = "00" + h;
	} else if(h.length == 2) {
		h = "0" + h;
	}
	return n + y + r + s + f + m + h;
}

/**
 * 检查数据有没有准备好
 * arguments 参数不固定，可以有多个，需要准备多少就传入多少，循环判断是否都已经准备好，再进入页面
 * 最后一个参数为准备好以后处理初始化页面的方法
 * 
 */
function checkDatasIsReady() {
	var args_length = arguments.length;
	var argMap = [];
	var readyhandler = arguments[args_length - 1];
	for(var i= 0; i < args_length - 1; i++) {
		argMap.push(arguments[i]);
	}
	var int = self.setInterval(function() {
		// 开启等待画面
		MaskUtil.mask();
		var isReady = true;
		for(var i= 0; i < argMap.length; i++) {
			var arg = window[argMap[i]];
			var jsonStr = null;
			if(arg) {
				try{
					jsonStr = JSON.stringify(arg).trim();
				} catch(e) {
					console.debug(e);
				}
			}
			if(jsonStr == null || jsonStr == "") {// || jsonStr == "{}" || jsonStr == "[]") {
				isReady = false;
			} else {
				// 删除已经准备好的参数,减少下一次进入时候的循环量
				argMap.splice(i,1);
				i--;
			}
		}
		if(isReady) {
			MaskUtil.unmask();
			window.clearInterval(int);
			if(typeof readyhandler == "function") {
				readyhandler();
			}
		}
	}, 200);
}

/** 格式化房屋坐标
 * 	@param array 房屋信息数组
 *	@param paramObj 以key -- building value -- params对象的形式存放
 *	@param params.splitflag 单元名称命名种类 1,2
 *	@param params.underfloor 地下层数 没有传0
 *	@param params.houseperfloor 一梯几户
 */
function formatRoomno(array,paramObj) {
	var targetObj,cell,floor;
	for(var i = 0; i < array.length; i++) {
		var splitflag = parseInt(paramObj[array[i].buildingid].splitflag);
		var underfloor = paramObj[array[i].buildingid].underfloor;
		var houseperfloor = paramObj[array[i].buildingid].houseperfloor;
		targetObj = array[i];
		var currRoom = targetObj.roomno;
		if(currRoom.indexOf(",")) {//如果存在多个室号
			var room = currRoom.split(",");
			currRoom = room[0];//取第一个室号
		}
		var len = currRoom.length;
		if(len < 3){
			cell = 0;
			floor = 0;
		} else {
			cell = parseInt(currRoom.substring(len, len - 2));
			floor = parseInt(currRoom.substring(len - 2, 0));
		}
		if(splitflag == 2) {//如果按单元分别
			var cellno = targetObj.cellid;
			cell = parseInt((cellno - 1) * houseperfloor + cell);
		}
		if(underfloor < 0) {//如果有地下层数就加上地下层数
			cell = cell + underfloor;
		}
		//异常处理
		if(isNaN(cell))
			cell = "";
		array[i].cellorder = cell;
		array[i].floororder = floor;
	}
	return array;
}
/** 
 * 使用方法: 
 * 开启:MaskUtil.mask(); 
 * 关闭:MaskUtil.unmask(); 
 *  
 * MaskUtil.mask('其它提示文字...'); 
 */
var MaskUtil = (function() {
	var $mask, $maskMsg;
	var defMsg = '正在处理，请稍待。。。';
	function init() {
		if (!$mask) {
			$mask = $("<div class=\"datagrid-mask mymask\" style=\"z-index: 9034;\"></div>").appendTo("body");
		}
		if (!$maskMsg) {
			$maskMsg = $("<div class=\"datagrid-mask-msg mymask\" style=\"z-index: 9035;\">" + defMsg + "</div>").appendTo("body").css({'font-size':'12px'});
		}
			$mask.css({width:"100%", height:$(document).height()});
			var scrollTop = $(document.body).scrollTop();
			$maskMsg.css({left:($(document.body).outerWidth(true) - 190) / 2, top:(($(window).height() - 45) / 2) + scrollTop});
	}
	return {mask:function(msg) {
		init();
			$maskMsg.html(msg || defMsg).show();
			$mask.show();
	}, unmask:function() {
		if($mask) {
			$maskMsg.hide();
			$mask.hide();
		}
	}}
}());




/**
 * 创建读卡器方法
 * readCard(i,id1,id2)必须的div
 */
function readyForCard(parentDiv){
	var parentDiv = $("#" + parentDiv).empty();
	parentDiv.innerHTML = "";
	var divContent = $("<object id='CardReader1' codebase='FirstActivex.cab#version=1,3,2,1' classid='CLSID:F225795B-A882-4FBA-934C-805E1B2FBD1B' "
			+	"	width='10' height='10' style='display: none;'>"
			+	"	<param name='_Version' value='65536'/>"
			+	"	<param name='_ExtentX' value='2646'/>"
			+	"	<param name='_ExtentY' value='1323'/>"
			+	"	<param name='_StockProps' value='0'/>"
			+	"	</object>" );
	parentDiv.append(divContent);
}

/**
 * 参数
 * 	i :参数 = 1，录入第一个业主名字和身份证信息，参数 = 2 ，录入带有‘，’的名字和身份证 
 * 	id1 ：业主名字的输入框ID
 * 	id2 ：业主身份证的输入框ID
 */
var isInit = false; //判断是否启用端口 标志
function readCard(i,id1,id2){ // 需要在加载页面的同时 使用 readyForCard（）方法
	var obj = document.getElementById("CardReader1");
//	if(typeof(obj.setPortNum) == 'function'){
		if (false == isInit) {
			// 设置端口号，1表示串口1，2表示串口2，依此类推；1001表示USB。0表示自动选择
			obj.setPortNum(1001);
			isInit = true;
		}
		// 使用重复读卡功能
		obj.Flag = 0;
		//读卡
		var rst = obj.ReadCard();
		if (0x90 == rst) {
			if(i == 1){
				$("#" + id1).textbox('setValue',obj.NameL());
				$("#" + id2).textbox('setValue',obj.CardNo());
			} else {
				var namel = '',cardno = '';
				var id1Content = $("#" + id1).val();
				var id2Content = $("#" + id2).val();
				namel = ',' + obj.NameL();
				cardno = ',' + obj.CardNo();
				$("#" + id1).textbox('setValue',id1Content + namel);
				$("#" + id2).textbox('setValue',id2Content + cardno);
			}
		} else {
			$.messager.alert("错误", "读卡失败，请稍后再试！","error");
			$("#" + id1).textbox('setValue','');
			$("#" + id2).textbox('setValue','');
		}
//	} else {
//		$.messager.alert("错误", "读卡失败，请稍后再试！","error");
//	}
}

/**
 * 计算小区物业保证金金额
 */
function calculatePaymentAmount(villagearea,formula_type,handler) {
	var currVillArea = villagearea;
	var calculateArray = [];//返回的计算数组
	call_remote(REQUEST_TYPE303, {formula_type:formula_type}, function(data) {
		var type = 0;
		for(var i = 0; i < data.length; i++) {
			var tempMap = {};
			if(parseFloat(currVillArea) >= parseFloat(data[i].start_val)) {
				tempMap.start_val = data[i].start_val;
				tempMap.end_val = data[i].end_val;
				tempMap.rate = data[i].rate;
				if(parseFloat(currVillArea) <= parseFloat(data[i].end_val)) {
					tempMap.payarea = parseFloat((currVillArea - data[i].start_val).toFixed(2));//将当前小区面积作为缴费面积
				} else {
					tempMap.payarea = parseFloat((data[i].end_val - data[i].start_val).toFixed(2))  ;//小区面积超过截止面积 直接复制截止面积作为缴费面积
				}
				tempMap.payment = parseFloat((tempMap.payarea * data[i].rate).toFixed(2));
				calculateArray.push(tempMap);
			}
		}
		return handler(calculateArray);
	});
}

function setCookie(name, value) {
	var Days = 30;
	var exp = new Date();
	exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
	document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}

function getCookie(name) {
	var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
	if (arr != null) {
		return (arr[2]);
	} else {
		return "";
	}
}

function delcookie(name) {
	var exp = new Date();
	exp.setTime(exp.getTime() - 1);
	var cval = getCookie(name);
	if (cval != null)
		document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}


/**
 * 远程调用方法 
 * 请求url约定为weixin/forward/business.html
 * 请求类型约定为 JSON
 * 
 * @param request_type 请求类型对应后台的MessageBean的request_type
 * @param request_pram 查询条件
 * @param callbackFun 返回的方法名
 * @param request_data 请求数据对应后台的data
 * @returns 返回值格式约定为 1、pram;页面参数参数json格式 2、request_type;请求类型 3、data;传值json格式
 * 
 */
function sendToBfmis_remote(request_type, request_pram, callbackFun, faultCallbackFun, request_data) {
	if(!request_data) {
		request_data = null;
	}
	if(!faultCallbackFun) {
		faultCallbackFun = this;
	}
	if(!request_pram)
		request_pram = {};
	// 当前登录用户的id固定传到后台
	request_pram.login_user = 0;
	var pram = {pram: request_pram, request_type:  request_type, data: request_data};
	sendToBfmis_base("http://61.160.250.164:8080/bfmis/service.yachtar", pram, callbackFun, faultCallbackFun);
}

/** 
 * 远程调用方法
 * 请求url约定为weixin/forward/business.html
 * 请求类型约定为 JSON
 * 
 * @param url http URL
 * @param request_pram 查询条件
 * @param callbackFun 返回的方法名
 * @returns 返回值格式约定为 1、pram;页面参数参数json格式 2、request_type;请求类型 3、data;传值json格式
 * **outerObj 外部页面对象取最后一个参数***
 * 
 */
function sendToBfmis_base(url,request_pram, callbackFun, faultCallbackFun) {
	if(!callbackFun) {
		callbackFun = function (data) {};
	}
	//外部对象
	var outerObj = arguments[arguments.length - 1];
	var msg = JSON.stringify(request_pram);
	$.ajax({
		type: "POST",
		url: url,
		data: msg,//这个是将json对象 转成 json字符串 传到后台
		success: function(data){
			if(typeof outerObj != "function" &&　outerObj && outerObj != window) {
				outerObj.ready = true;
				console.debug("request_type;" + request_pram.request_type);
			}
			if(data.error_content != null && data.error_content != "") {
				var errorStr = data.detail;
				if(errorStr == null || errorStr.trim() == "") {
					errorStr = "数据库出错，请联系管理员";
				}
				try {
					$.messager.alert("错误", errorStr, "error");
				} catch (e) {
					alert(errorStr);
				}
				if(typeof faultCallbackFun == "function")
					faultCallbackFun();
			} else {
				var result = "";
				if(data.hasOwnProperty("data"))
					result = data.data;
				else
					result = data;
				try {
					if(typeof result == "string")
						result = jQuery.parseJSON(result);
				} catch (e){
				}
				if(typeof callbackFun == "function")
					callbackFun(result);
			}
		},
		dataType: "json",
		contentType:"application/json;charset=UTF-8",
		error: function (XMLHttpRequest, textStatus, errorThrown){
			var error_info;
			try {
				error_info = jQuery.parseJSON(XMLHttpRequest.responseText).detail;
			} catch (e){
				error_info = XMLHttpRequest.responseText;
			}
			if(error_info == "") {
				error_info = "页面过期，请重新登录";
			}
			if(typeof faultCallbackFun == "function")
				faultCallbackFun();
			else
				$.messager.alert("错误", error_info, "error");
		}
	});
}
